package com.gdones.gpt.bus.gptstaff.controller;


import cn.hutool.extra.mail.MailUtil;
import com.gdones.common.core.annotations.MySysLog;
import com.gdones.common.core.annotations.MySysLogOpration;
import com.gdones.common.core.dto.MyPageBand;
import com.gdones.common.core.dto.MyResult;
import com.gdones.gpt.bus.gptstaff.dto.Staff;
import com.gdones.gpt.bus.gptstaff.dto.StaffDto;
import com.gdones.gpt.bus.gptstaff.dto.UpdateStaffGrantDto;
import com.gdones.gpt.bus.gptstaff.service.IStaffInfoService;
import com.gdones.gpt.bus.gptstaff.service.IStaffService;
import com.gdones.gpt.bus.modetemplate.dto.GptTemplate;
import com.gdones.gpt.bus.modetemplate.dto.GptTemplateDto;
import com.gdones.gpt.core.util.MyRedisUtil;
import com.wf.captcha.GifCaptcha;
import com.wf.captcha.base.Captcha;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author GaoJingBo
 * @since 2023-06-04
 */
@RestController
@RequestMapping("/gptstaff")
@Slf4j
@Api(tags = "AilyChat客户管理")
@RefreshScope
public class StaffController {

    @Resource(name = "staffServiceImpl")
    private IStaffService staffServiceImpl;

    @Autowired
    private MyRedisUtil redisUtil;

    @GetMapping("/registerSendReqCode")
    @ApiOperation("AilyChat客户管理-注册时-发送邮箱验证码")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "注册时-发送邮箱验证码",methodType = MySysLogOpration.GET)
    public MyResult registerSendReqCode(String mailTo,String localID){

        log.debug("--AilyChat客户管理：注册时-发送邮箱验证码");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.registerSendReqCode(mailTo,localID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-注册时-发送邮箱验证码-异常");
        }
        return result;
    }

    @GetMapping("/fgetSendReqCode")
    @ApiOperation("AilyChat客户管理-忘记密码-发送邮箱验证码")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "忘记密码-发送邮箱验证码",methodType = MySysLogOpration.GET)
    public MyResult fgetSendReqCode(String mailTo,String localID){

        log.debug("--AilyChat客户管理：忘记密码-发送邮箱验证码");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.fgetSendReqCode(mailTo,localID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-忘记密码-发送邮箱验证码-异常");
        }
        return result;
    }

    @GetMapping("/fgetCheck")
    @ApiOperation("AilyChat客户管理-忘记密码-验证码验证")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "忘记密码-验证码验证",methodType = MySysLogOpration.GET)
    public MyResult fgetCheck(String emailQrCode,String localID){

        log.debug("--AilyChat客户管理：忘记密码-验证码验证");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.fgetCheck(emailQrCode,localID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-忘记密码-验证码验证-异常");
        }
        return result;
    }

    @GetMapping("/getLoginReqCode")
    @ApiOperation("AilyChat客户管理-登录时-获取登验证码")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "登录时-获取登验证码",methodType = MySysLogOpration.GET)
    public MyResult getLoginReqCode(String localID){

        log.debug("--AilyChat客户管理：登录时-获取登验证码");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.getLoginReqCode(localID);


        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-登录时-获取登验证码-异常");
        }
        return result;
    }

    @PostMapping("/add")
    @ApiOperation("AilyChat客户管理-注册")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "注册",methodType = MySysLogOpration.POST)
    public MyResult add(HttpServletRequest request,@RequestBody StaffDto dto){

        log.debug("--AilyChat客户管理：注册");
        MyResult result = new MyResult();

        try {
            String ip = request.getHeader("X-Forwarded-For");
            dto.setInsertIP(ip);

            result = staffServiceImpl.add(dto);
        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-注册-异常");
        }
        return result;
    }

    @PutMapping("/changePwd")
    @ApiOperation("AilyChat客户管理-重置密码")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "重置密码",methodType = MySysLogOpration.PUT)
    public MyResult changePwd(@RequestBody Staff dto){

        log.debug("--AilyChat客户管理：重置密码");
        MyResult result = new MyResult();

        try {
            result = staffServiceImpl.changePwd(dto);
        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-重置密码-异常");
        }
        return result;
    }

    @PostMapping("/login")
    @ApiOperation("AilyChat客户管理-登录")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "登录",methodType = MySysLogOpration.POST)
    public MyResult login(HttpServletRequest request,@RequestBody StaffDto dto){

        log.debug("--AilyChat客户管理：登录");
        MyResult result = new MyResult();

        try {
            result = staffServiceImpl.login(request,dto);
        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-登录-异常");
        }
        return result;
    }

    @GetMapping("/getStaffDataByID")
    @ApiOperation("AilyChat客户管理-查看个人信息")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "查看个人信息",methodType = MySysLogOpration.GET)
    public MyResult getStaffDataByID(String staffID){

        log.debug("--AilyChat客户管理：查看个人信息");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.getStaffDataByID(staffID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-查看个人信息-异常");
        }
        return result;
    }

    @GetMapping("/getStaffInfos")
    @ApiOperation("AilyChat客户管理-查看操作日志")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "查看操作日志",methodType = MySysLogOpration.GET)
    public MyResult getStaffInfos(String staffID){

        log.debug("--AilyChat客户管理：查看操作日志");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.getStaffInfos(staffID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-查看操作日志-异常");
        }
        return result;
    }

    @GetMapping("/checkStaffCanUseModel")
    @ApiOperation("AilyChat客户管理-核验客户是否可以调用")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "核验客户是否可以调用",methodType = MySysLogOpration.GET)
    public MyResult checkStaffCanUseModel(String staffModesID,String staffID){

        log.debug("--AilyChat客户管理：核验客户是否可以调用");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.checkStaffCanUseModel(staffModesID,staffID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-核验客户是否可以调用-异常");
        }
        return result;
    }

    @PutMapping("/updateStaffUseLess")
    @ApiOperation("AilyChat客户管理-对客户的使用进行记录")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "对客户的使用进行记录",methodType = MySysLogOpration.PUT)
    public MyResult updateStaffUseLess(String staffModesID){

        log.debug("--AilyChat客户管理：对客户的使用进行记录");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.updateStaffUseLess(staffModesID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-对客户的使用进行记录-异常");
        }
        return result;
    }

    @GetMapping("/getStaffGrantByGrantID")
    @ApiOperation("AilyChat客户管理-获取授权模型的信息")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "获取授权模型的信息",methodType = MySysLogOpration.GET)
    public MyResult getStaffGrantByGrantID(String staffModesID){

        log.debug("--AilyChat客户管理：获取授权模型的信息");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.getStaffGrantByGrantID(staffModesID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-获取授权模型的信息-异常");
        }
        return result;
    }

    @GetMapping("/page")
    @ApiOperation("AilyChat客户管理-客户列表")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "客户列表",methodType = MySysLogOpration.GET)
    public MyResult page(Staff dto,MyPageBand pageBand){

        log.debug("--AilyChat客户管理：客户列表");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.mypage(dto,pageBand);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-客户列表-异常");
        }
        return result;
    }

    @GetMapping("/getSimpleStaffData")
    @ApiOperation("AilyChat客户管理-只是获取客户信息")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "只是获取客户信息",methodType = MySysLogOpration.GET)
    public MyResult getSimpleStaffData(String staffID){

        log.debug("--AilyChat客户管理：只是获取客户信息");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.getSimpleStaffData(staffID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-只是获取客户信息-异常");
        }
        return result;
    }

    @GetMapping("/list")
    @ApiOperation("AilyChat客户管理-客户列表(不分页)")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "客户列表(不分页)",methodType = MySysLogOpration.GET)
    public MyResult page(Staff dto){

        log.debug("--AilyChat客户管理：客户列表(不分页)");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.mylist(dto);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-客户列表(不分页)-异常");
        }
        return result;
    }


    @PutMapping("/update")
    @ApiOperation("AilyChat客户管理-客户信息修改")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "客户信息修改",methodType = MySysLogOpration.PUT)
    public MyResult update(@RequestBody Staff dto){

        log.debug("--AilyChat客户管理：客户信息修改");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.myupdate(dto);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-客户信息修改-异常");
        }
        return result;
    }

    @PutMapping("/staffResetUseLess")
    @ApiOperation("AilyChat客户管理-重置当前客户的每日调用额度")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "重置当前客户的每日调用额度",methodType = MySysLogOpration.PUT)
    public MyResult staffResetUseLess(String staffID){

        log.debug("--AilyChat客户管理：重置当前客户的每日调用额度");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.staffResetUseLess(staffID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-重置当前客户的每日调用额度-异常");
        }
        return result;
    }

    @DeleteMapping("/deletes")
    @ApiOperation("AilyChat客户管理-删除用户")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "删除用户",methodType = MySysLogOpration.DELETE)
    public MyResult deletes(String ids){

        log.debug("--AilyChat客户管理：删除用户");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.deletes(ids);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-删除用户-异常");
        }
        return result;
    }

    @PutMapping("/updateStaffGrant")
    @ApiOperation("AilyChat客户管理-更新用户授权模型信息")
    @MySysLog(modelName="AilyChat客户管理",methodDesc = "更新用户授权模型信息",methodType = MySysLogOpration.PUT)
    public MyResult updateStaffGrant(@RequestBody UpdateStaffGrantDto dto){

        log.debug("--AilyChat客户管理：更新用户授权模型信息");
        MyResult result = new MyResult();

        try {

            result = staffServiceImpl.updateStaffGrant(dto);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("AilyChat客户管理-更新用户授权模型信息-异常");
        }
        return result;
    }

}
